package cn.com.dcsgo.controller;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * 全局异常处理器
 * 对于异常地处理我们可以统一交给一个Controller来处理
 * 对于这个Controller我们可以使用
 * ControllerAdvice或者RestControllerAdvice注解修饰
 * ControllerAdvice可以进行视图解析(页面跳转和转发)
 * RestControllerAdvice=ControllerAdvice+ResponseBody
 *
 * @author Dcsgo
 * @since 2025/3/5 8:52
 */
@RestControllerAdvice
public class GlobalExceptionController {

    /**
     * 异常处理方法上使用@ExceptionHandler注解修饰
     * 表示要处理的异常类型，方法参数通常是异常类型，SpringMVC会自动注入该异常
     *
     * @param e IllegalArgumentException
     * @return String
     */
    @ExceptionHandler(IllegalArgumentException.class)
    public String IllegalArgumentExceptionHandler(IllegalArgumentException e) {
        return e.getMessage();
    }

    /**
     * 如果有精准匹配的异常类型，则优先处理
     * 否则会向上进行匹配
     *
     * @param e e
     * @return String
     */
    @ExceptionHandler(Throwable.class)
    public String ThrowableHandler(Throwable e) {
        return "exceptionsThatExceedExpectations: " + e.getMessage();
    }

}
